# coding=utf-8
"""
    日志
     IP
    目录
"""

import logging
import os
import shutil
import socket
from logging.handlers import TimedRotatingFileHandler

# @Time    :  2024-06-06 12:35:27
# @Author  :  jiangtong
# @Email   :  gingerqgyy@outlook.com
# @Project :  mysql_backup
# @File    :  do_log

LOG_FILE = os.sep.join([os.path.dirname(os.path.dirname(__file__)), 'logs', 'mysql_auto_backup.out'])


# 日志记录初始化 :
def log():
    _t_log = logging.getLogger('mysql_auto_backup')
    _t_log.setLevel(10)

    console = logging.StreamHandler()
    console.setLevel(10)
    console.setFormatter(logging.Formatter('[ %(asctime)s ] [ %(threadName)s ] [ %(filename)s / %(lineno)d / %(funcName)s ] ---> %(message)s', datefmt='%Y-%m-%d %H:%M:%S'))
    _t_log.addHandler(console)

    filehandler = TimedRotatingFileHandler(LOG_FILE, when='W1', backupCount=3, encoding='utf8')
    filehandler.suffix = "%Y-%m-%d_%H-%M-%S.out"

    filehandler.setLevel(10)
    filehandler.setFormatter(logging.Formatter('[ %(asctime)s ] [ %(threadName)s ] [ %(filename)s / %(lineno)d / %(funcName)s ] ---> %(message)s', datefmt='%Y-%m-%d %H:%M:%S'))
    _t_log.addHandler(filehandler)
    return _t_log


# 备份目录清空 :
def recreate_directory(directory):
    """
    如果目标目录存在
    则清空目标目录
    然后重新创建

    所以就是仅保留一次备份 ( 这里最好优化为保留两次 )
    """
    try:
        if os.path.exists(directory):
            sql_log.info(f'目录 : {directory} 已存在')
            shutil.rmtree(directory)
            sql_log.info(f'目录 : {directory} 已删除')
        os.makedirs(directory)
        sql_log.info(f'目录 : {directory} 已创建')
    except PermissionError as e:
        sql_log.error(f"PermissionError: {e}")
        raise
    except Exception as e:
        sql_log.error(f"Error while recreating directory {directory}: {e}")
        raise


# 本机 ip 获取 :
def get_local_ip():
    """
    获取本机 ip 地址

    后续如果换到别人电脑上运行的话, 就能自动获取到宿主机的 ip 地址
    """
    _ip = '192.168.1.119'
    try:
        # 创建一个 socket 对象
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # 连接远程地址，随便填一个不影响的地址和端口
        s.connect(('8.8.8.8', 80))
        # 获取本地 IP 地址
        _local_ip = s.getsockname()[0]
        sql_log.debug(f'获取到本地 IP 地址 : {_local_ip}')
    except Exception as e:
        sql_log.debug(f'获取本地 IP 地址失败 : {e} , 使用默认 ip 地址')
        _local_ip = _ip
    return _local_ip


# 创建日志收集器 :
sql_log = log()
local_ip = get_local_ip()

if __name__ == '__main__':
    recreate_directory(r"C:\Users\yl\Desktop\demo")
